var scoketio = {}  //要暴露出去的对象 
var scoket_io = require('socket.io')
var cors = require('cors')
scoketio.getscoketio = function (server) {

    var io = scoket_io(server, { cors: true });   //server就是服务器监听的对象
    //每当一个用户登录，就会生成一个socket对象,此时的socket是对应正连接的客户端对象
    //为什么它只会发送给刚连接的用户呢？因为这个socket就是刚连接的用户生成的。 
    console.log('Socket.IO 服务器已启动');

    // 用户列表
    const clients = {}
    //监听connect行为，传入一个socket对象,客户端发起连接时触发
    io.on('connection', (socket) => {
        console.log('有一个用户连接，Socket ID:', socket.id);
        // 用户连接获取用户名生成用户列表
        socket.on('join', (data) => {
            const { name } = data
            // 根据用户返回的用户名存储客户端信息
            clients[name] = socket
            console.log('用户列表：', Object.keys(clients));
        })
        // 心跳机制
        socket.on('ping', () => {
            socket.emit('pong');
        });
        // 监听图片
        socket.on('sendImage', (data) => { 
            console.log('监听到发送图片')
            const { sender, receiver } = data
            const receiverSocket = clients[receiver]
            if (receiverSocket) {
                console.log('指定的用户：', receiver);
                receiverSocket.emit('receiveImage', data);
            } else {
                console.log('用户不在线');
            }
        })


        //用户发信息时触发
        socket.on('sendMsg', (data) => {
            const { sender, receiver, message, time } = data
            // console.log('用户发送的消息', message);
            // console.log('用户发送的目标用户', targetUser);

            // 返回消息发送者的信息
            socket.emit('setId', { msg: '你好发送信息的用户' })

            // 将消息发送给指定的接收者
            const receiverSocket = clients[receiver]
            if (receiverSocket) {
                console.log('指定的用户：', receiver);
                receiverSocket.emit('receiveMsg', data);
            } else {
                console.log('用户不在线');
            }
        })

        
        // 监听断开连接事件
        socket.on('disconnect', () => {
            console.log('一个用户断开连接，Socket ID:', socket.id);
        });
    })
}

module.exports = scoketio;
